package br.com.simon.controller;

import java.util.List;

import br.com.caelum.vraptor.Delete;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Put;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.Validator;
import br.com.caelum.vraptor.view.Results;
import br.com.simon.dao.TurmaDao;
import br.com.simon.modelo.Restrito;
import br.com.simon.modelo.Turma;

@Resource
public class TurmaController {
	private final TurmaDao turmaDao;
	private final Result result;
	private final Validator validator;

	public TurmaController(TurmaDao turmaDao, Result result,
			Validator validator) {
		this.turmaDao = turmaDao;
		this.result = result;
		this.validator = validator;
	}

	@Get("/turmas/lista")
	public void lista() {
		String mensagem = "teste";
		result.include("key", mensagem);
		result.include("turmaList", turmaDao.listaTudo());
	}

	@Restrito
	@Post("/turmas")
	public void adiciona(Turma turma) {
		validaFormulario(turma);
		turmaDao.salva(turma);
		result.redirectTo(this).lista();
	}

	@Restrito
	@Get("/turmas/novo")
	public void formulario() {
	}

	@Restrito
	@Get("/turmas/{id}")
	public Turma edita(Long id) {
		return turmaDao.getTurma(id);
	}

	@Restrito
	@Put("/turmas/{turma.id}")
	public void altera(Turma turma) {

		validaFormulario(turma);

		turmaDao.atualiza(turma);
		result.redirectTo(this).lista();
	}


	@Get("/turmas/busca.json")
	public void buscaJson(String q) {
		result.use(Results.json()).withoutRoot().from(turmaDao.busca(q))
				.exclude("id", "assunto").serialize();
	}

	@Get("/turmas/busca")
	public List<Turma> busca(String id) {
		result.include("id", id);
		return turmaDao.busca(id);
	}

	private void validaFormulario(Turma turma) {
		validator.validate(turma);
		validator.onErrorUsePageOf(this).formulario();
	}
	
	@Restrito
	@Delete("/turmas/{id}")
	public void remove(Long id) {
		Turma turma = turmaDao.getTurma(id);
		turmaDao.remove(turma);
		result.redirectTo(this).lista();
	}

	@Get("/turmas/remove")
	public void remove() {
		String mensagem = "teste";
		result.include("key", mensagem);
		result.include("turmaList", turmaDao.listaTudo());
	}
}



